package br.cesed.lti.ementol.bo;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import cc.co.taciano.webbase.Fachada;
import cc.co.taciano.webbase.bo.AbstractBO;
import cc.co.taciano.webbase.bo.BOException;
import cc.co.taciano.webbase.dao.DAOException;
import cc.co.taciano.webbase.dao.Dao;

import br.cesed.lti.ementol.beans.Periodo;
import br.cesed.lti.ementol.dao.PeriodoDao;

/**
 * Classe de negócio do bean Período do sistema CesuWeb.
 * @author Taciano Morais Silva
 * @version 14/01/2009, 11h08m
 * @since 14/01/2009, 11h08m
 */
public class PeriodoBO extends AbstractBO {

    public PeriodoBO(Fachada fachada) {
        super(fachada);
    }

    /**
     * Lista todos os períodos cadastrados no sistema.
     * @return A lista de períodos.
     */
    public List<Periodo> listar() throws BOException {
        try {
            Dao<Periodo> dao = new PeriodoDao();
            return dao.findAll();
        } catch (DAOException ex) {
            Logger.getLogger(PeriodoBO.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            throw new BOException("erro.periodo.bo.listar", ex);
        }
    }

    /**
     * Busca o período a partir do seu identificador.
     * @param id O identificador do período.
     * @return O período localizado.
     */
    public Periodo buscar(Integer id) throws BOException {
        try {
            Dao<Periodo> dao = new PeriodoDao(getFachada());
            return dao.find(id);
        } catch (DAOException ex) {
            Logger.getLogger(PeriodoBO.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            throw new BOException("erro.periodo.bo.buscar", ex);
        }
    }

    /**
     * Retorna o período ativo.
     * @return O período ativo.
     */
    public Periodo getPeriodoAtivo() throws BOException {
        try {
            PeriodoDao dao = new PeriodoDao();
            return dao.getPeriodoAtivo();
        } catch (DAOException ex) {
            Logger.getLogger(PeriodoBO.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            throw new BOException("erro.periodo.bo.getPeriodoAtivo", ex);
        }
    }
}
